package 力扣.链表;


import java.util.List;

//Definition for singly-linked list.
class ListNode {
      int val;
      ListNode next;
      ListNode() {}
      ListNode(int val) { this.val = val; }
      ListNode(int val, ListNode next) { this.val = val; this.next = next; }
  }

public class 交换链表的节点24 {
    //正解
    public static ListNode swapPairs(ListNode head) {
        if (head==null){
            return head;
        }else if (head.next==null){
            return head;
        }
        ListNode te=new ListNode(0);
        te.next=head;
        ListNode p=te;
        for (;p.next!=null&& p.next.next!=null ;) {
             ListNode p1=p.next;
             ListNode p2=p.next.next;
             p1.next=p2.next;
             p2.next=p1;
             p.next=p2;
             p=p1;
        }
        return te.next;
    }public static ListNode swapPairs2(ListNode head) {
        ListNode p=head;
        ListNode pre=null;
        while (p.next!=null){
            ListNode p1=p;//head和p和p1都是同一指向的
            ListNode p2=p.next;
            p1.next=p2.next;//此时p1变了，head也会变的
            p2.next=p1;
            p=p2;
            if (pre!=null){
                pre.next=p;
            }
            pre=p.next;
            p=p.next.next;
        }
        return head;
    }
    public static void linktest(ListNode head){//head 原值 1 2 3 4 5
        ListNode p=head;
       // p=p.next; //head的所有值不会改变 为1 2 3 4 5
        p.next=p.next.next;//head 会变为1 3 4 5
        System.out.println(head.val+" "+head.next.val+" "+head.next.next.val+" "+head.next.next.next.val);
    }

    public static void main(String[] args) {
        ListNode l1=new ListNode(1);
        l1.next=new ListNode(2,new ListNode(3));
       l1.next.next.next=new ListNode(4,new ListNode(5));
        //l1.next.next.next=new ListNode(4);
        //ListNode listNode = swapPairs2(l1);
        //System.out.println(listNode.val+""+listNode.next.val+""+listNode.next.next.val+""+listNode.next.next.next.val+""+listNode.next.next.next.next.val);
      //  System.out.println(listNode.val+""+listNode.next.val+""+listNode.next.next.val+""+listNode.next.next.next.val);
    //   System.out.println(listNode.val);

        linktest(l1);
    }

}
